#ifndef _MOT823111_H_
#define _MOT823111_H_

#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_adc.h"
#include "stm32f10x_dma.h"
#include "stm32f10x_dac.h"
#include "stm32f10x_tim.h"
#include "misc.h"

#include "sndMsg.h"

// global variables
extern uint16_t SIG1;
extern uint16_t SIG2;
extern volatile uint16_t AnalogInputs[8];
extern unsigned char tab[8];



//#include "stm32f10x_usart.h"
//#include <stdio.h>

void SetupClock(void);
void InitPeriph(void);
void TogleLEDA(void);
void OnLEDA(void);
void OffLEDA(void);
void TogleLEDB(void);
void OnLEDB(void);
void OffLEDB(void);
void Delay(uint32_t nCount);


typedef enum
{
    M_Left,
    M_Right,
    M_Stop,
    M_Free
}M_CmdTypeDef;

typedef enum
{
	M_ADC_M1CS = 		0, 	// датчик тока первого драйвера
	M_ADC_M2CS = 		1,	// датчик тока второго драйвера
	M_ADC_SIGA = 		2,	// аналоговый вход А
	M_ADC_SIGB = 		3,	// аналоговый вход В
	M_ADC_VS = 			4,	// входное напряжение
	M_ADC_BoardTemp =	5,	// температура на плате в районе дроперов
	M_ADC_VRef = 		6,	// референсное значение напряжения (для работы датчика температуры)
	M_ADC_ChipTerm = 	7	// внутренний датчик температуры
}M_ADC_Ch;



void SetPeriphClock(void);      // run first
void M1_Init(void);             // setup pins mode for M1
void M2_Init(void);             // setup pins mode for M2

void M1_Set(M_CmdTypeDef, uint16_t);   // direction (Left, Right, Stop, Free), Speed 0-1024%
void M2_Set(M_CmdTypeDef, uint16_t);   // direction (Left, Right, Stop, Free), Speed 0-1024%

void MAdc_Init(void);            // settingsup the ADC to single conversion
void MAdc_InitDMA(void);        // settingsup the ADC to contious mode and data transfer over DMA
void MAdc_Start(void);          // start conversion
void ADC1_IRQHandler(void);     // ADC1 Interrupt hendler
void DMA1_Channel1_IRQHandler(void);    // DMA1_1 Interrupt Hendler

void ENDs_Init (void);          // init ENDs GPIO as input with PU
uint8_t ENDA (void);           // End switch A
uint8_t ENDB (void);           // End switch B

uint16_t ReadIntTemp(void);     // read data from ADC and fata to temperature conversion

void SetP_Init(void);           // set up the DAC to pressure control
void Sound_Init(void);          // set up the DAC to play the Sound
void PlaySound(void);           // run DMA to play the Sound 1 time

void MOT823_Init(void);         // make all settings

#endif //_MOT823111_H_
